package com.grape.enums;

import com.grape.constants.Constants;
import lombok.Getter;

import java.util.Arrays;

/**
 * 类描述： RedisKey类
 *
 * @author  putao
 * @email   2628279194@qq.com
 */
@Getter
public enum RedisKeyEnums {

    /** PC端验证码 有效期 3分钟 */
    GRAPHIC_VERIFY_CODE("graphic_verify_code", 120L),

    /** 敏感词 */
    CENSOR_WORD("censor_word", -1L),

    /** 登录用户 */
    LOGIN_USER("login_user", -1L),

    /** 用户id为key,token为value */
    USER_ID_KEY_TOKEN_VALUE("user_id_token", -1L),

    /** 获取微博数据 */
    GET_WEIBO_DATA("get_weibo_data", 180L),

    /** 注册用户 */
    SIGN_UP("sign_up_user", 180L),

    /** 验证码 */
    VERIFY_CODE_KEY("code", 180L),

    /** 黑名单 */
    BLACK_LIST("black_list", 180L),

    /** 热点数据 */
    HOT_DATA("hot_data", 360L),

    /** 心跳检测 默认5分钟一次 */
    HEARTBEAT_DETECTION("heartbeat_detection", 180L),

    /** 二维码 默认3分钟 */
    QR_CODE_TIME_OUT("qr_code", 180L),

    /** 手机验证码 */
    PHONE_CODE("phone_code", 180L),

    /** 用户权限 */
    USER_PERMISSION("user_permission", -1L),

    /** 用户详情 */
    USER_DETAIL("user_detail", -1L),

    /** 分享用户 */
    SHARE_USER_VO_LIST("share_user_vo_list", -1L),

    /** 聊天用户 */
    CHAT_USER_VO_LIST("chat_user_vo_list", -1L),

    /** 上一次消息 */
    LAST_MESSAGE("last_message", -1L),

    /** 上一次会话 */
    LAST_SESSION("last_session", 86400L),
    ;

    /** key的前缀 */
    private final String prefix;

    /** key的有效时间 */
    private final Long time;

    /**
     * 全参构造
     * @param prefix    前缀
     * @param time      过期时间
     */
    RedisKeyEnums(String prefix, Long time) {
        this.prefix = prefix;
        this.time = time;
    }

    /**
     * 拼接 验证码存入redis后的key,例如    graphic_verify_code:14902393274
     * @param values    拼接的字符串
     * @return          前缀和字符串参数拼接后的值
     */
    public String join(String... values) {
        StringBuilder stringBuilder = new StringBuilder(80);
        stringBuilder.append(this.prefix);
        if (values != null && values.length > 0) {
            Arrays.stream(values).forEach(value -> stringBuilder.append(Constants.M).append(value));
        }
        return stringBuilder.toString();
    }

}
